package com.hfut.jpoa.dao.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;

import com.hfut.jpoa.common.dto.ResultDto;
import com.hfut.jpoa.common.exception.DaoException;
import com.hfut.jpoa.dao.WorkSystemDAO;
import com.hfut.jpoa.dto.WorkSystemDTO;
import com.hfut.jpoa.model.Notice;
import com.hfut.jpoa.model.WorkSystem;
import com.ibatis.sqlmap.client.SqlMapClient;

public class WorkSystemDAOImpl implements WorkSystemDAO {
    private SqlMapClient sqlMapClient;
    private static final Logger LOGGER = LoggerFactory
	        .getLogger(WorkSystemDAOImpl.class);


    public int deleteByPrimaryKey(Long id) throws DaoException {
        WorkSystem key = new WorkSystem();
        key.setId(id);
        int rows = 0;
        try
        {
	        rows = sqlMapClient.delete("tb_jpoa_work_system.ibatorgenerated_deleteByPrimaryKey", key);
        } catch (SQLException e)
        {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
        }
        return rows;
    }

    public void insert(WorkSystem record) throws DaoException {
        try
        {
	        sqlMapClient.insert("tb_jpoa_work_system.ibatorgenerated_insert", record);
        } catch (SQLException e)
        {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
        }
    }

    public void insertSelective(WorkSystem record) throws DaoException {
        try
        {
	        sqlMapClient.insert("tb_jpoa_work_system.ibatorgenerated_insertSelective", record);
        } catch (SQLException e)
        {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
        }
    }

    public WorkSystem selectByPrimaryKey(Long id) throws DaoException {
        WorkSystem key = new WorkSystem();
        key.setId(id);
        WorkSystem record = null;
        try
        {
	        record = (WorkSystem) sqlMapClient.queryForObject("tb_jpoa_work_system.ibatorgenerated_selectByPrimaryKey", key);
        } catch (SQLException e)
        {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
        }
        return record;
    }

    public int updateByPrimaryKeySelective(WorkSystem record) throws DaoException {
        int rows = 0;
        try
        {
	        rows = sqlMapClient.update("tb_jpoa_work_system.ibatorgenerated_updateByPrimaryKeySelective", record);
        } catch (SQLException e)
        {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
        }
        return rows;
    }

    public int updateByPrimaryKey(WorkSystem record) throws DaoException {
        int rows = 0;
        try
        {
	        rows = sqlMapClient.update("tb_jpoa_work_system.ibatorgenerated_updateByPrimaryKey", record);
        } catch (SQLException e)
        {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
        }
        return rows;
    }

	public SqlMapClient getSqlMapClient()
    {
    	return sqlMapClient;
    }

	public void setSqlMapClient(SqlMapClient sqlMapClient)
    {
    	this.sqlMapClient = sqlMapClient;
    }

	public ResultDto<WorkSystem> findInfoForPage(WorkSystemDTO condition)
    {
		ResultDto<WorkSystem> result = new ResultDto<WorkSystem>();
		try
		{
			List<WorkSystem> configsList = sqlMapClient.queryForList(
			        "tb_jpoa_work_system.find_for_page", condition);
			result.setResult(configsList != null ? configsList
			        : new ArrayList<WorkSystem>());
			BeanUtils.copyProperties(condition.getPagination(),
			        result.getPagination());
			result.getPagination().setTotal(
			        (Integer) sqlMapClient.queryForObject(
			                "tb_jpoa_work_system.find_for_page_count", condition));
		} catch (SQLException e)
		{
			LOGGER.error("findInfoForPage exception", e);
			throw new DaoException("findInfoForPage exception", e);
		}
		return result;
    }
}